package top.blackr.folivora.common.pay.transfer;

import top.blackr.folivora.common.pay.function.TransferCallbackConsumer;
import top.blackr.folivora.common.pay.function.TransferConsumer;
import top.blackr.folivora.common.pay.transfer.entity.TransferRequest;

import java.util.Map;

/**
 * 提现策略接口
 *
 * @author BlackR
 */
public interface ITransferStrategy<T extends TransferRequest, C, CB> {

    /**
     * 生成批次的订单号，不生成明细订单号
     */
    void generateNo(T request);

    /**
     * 转账
     *
     * @param br       请求
     * @param consumer 转账请求结果
     */
    void transfer(T br, TransferConsumer<C> consumer);

    /**
     * 三方提现批次的订单号，不是内部订单号
     *
     * @param transferNo 订单号
     */
    default void getTransferByTransferNo(String transferNo) {
    }

    /**
     * 提现回调
     *
     * @param requestBody      请求body
     * @param headers          请求头
     * @param callbackConsumer 回调业务逻辑
     * @return 回调结果，后续看其他提现方式再调整Map
     */
    default Map<String, String> transferCallback(String requestBody, Map<String, String> headers, TransferCallbackConsumer<CB> callbackConsumer) {
        return null;
    }
}
